package cn.felord.current;

/**
 * synchronized 关键字
 * synchronized可以保证方法或者代码块在运行时，
 * 同一时刻只有一个方法可以进入到临界区，
 * 同时它还可以保证共享变量的内存可见性。
 * 属于重量级的锁，基于JVM  monitor  java对象头
 *
 * @author Dax
 * @since 14 :01  2018/7/16
 */
public class Syn {
    private final Object synLock = new Object();

    /**
     * 该关键字在普通方法上锁是当前的实例对象  .
     */
    public synchronized void commonMethod() {

    }

    /**
     * 静态同步方法，锁是当前类的class对象
     */
    public static synchronized void staticMethod() {

    }

    /**
     * 同步方法块，锁是括号里面的对象.
     */
    public void inner() {
        synchronized (synLock) {

        }
    }
}
